home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MOS / STRCONV.I < prev    next >
Encoding:
Modula Implementation  |  1990-11-10  |  9.4 KB  |  359 lines

  1. IMPLEMENTATION MODULE StrConv;
  2. (*$Y+,L-,R-,N+*)
  3.  
  4. (*
  5.  *----------------------------------------------------------------------------
  6.  * Copyright Januar 1987 Thomas Tempelmann
  7.  *----------------------------------------------------------------------------
  8.  * System - Version   : MOS 2.0
  9.  * Version            : 1.1
  10.  * Text - Version     : V#0042
  11.  *----------------------------------------------------------------------------
  12.  * Modul-Beschreibung : Umwandlungsfunktionen zw. Zahlen und Strings
  13.  *----------------------------------------------------------------------------
  14.  * Datum     Version  Autor  Bemerkung (Arbeitsbericht)
  15.  *----------------------------------------------------------------------------
  16.  * 20.01.87  1.0      TT     Impl.
  17.  * 06.12.87  1.0      TT     Assembler-Umstellung
  18.  * 18.08.89  1.1      TT     fill-Parameter bei NumToStr
  19.  *----------------------------------------------------------------------------
  20.  *)
  21.  
  22. FROM SYSTEM IMPORT ASSEMBLER;
  23. FROM SYSTEM IMPORT LONGWORD, WORD, ADR;
  24.  
  25. FROM Strings IMPORT String;
  26.  
  27. FROM Convert IMPORT GetInfo;
  28.  
  29. IMPORT Convert;
  30.  
  31.  
  32. TYPE MyInf = RECORD
  33.                pstr: POINTER TO ARRAY [0..79] OF String;
  34.                len : CARDINAL;
  35.                pidx: POINTER TO INTEGER;
  36.              END;
  37.  
  38.  
  39. PROCEDURE chrGet (VAR info: GetInfo);
  40.   BEGIN
  41.     ASSEMBLER
  42.         MOVE.L  -(A3),A0
  43.         MOVE.L  GetInfo.userPtr(A0),A1
  44.         MOVE.L  MyInf.pidx(A1),A2
  45.         ADDQ.W  #1,(A2)
  46.         MOVE.W  (A2),D0
  47.         CMP.W   MyInf.len(A1),D0
  48.         BHI     full            ; index hat HIGH-Wert überschritten
  49.         MOVE.L  MyInf.pstr(A1),A1
  50.         MOVE.B  0(A1,D0.W),GetInfo.ch(A0)
  51.         RTS
  52.       full
  53.         CLR.B   GetInfo.ch(A0)
  54.     END
  55.   END chrGet;
  56.  
  57. PROCEDURE prpTo;
  58.   BEGIN
  59.     ASSEMBLER
  60.         MOVE.L  (A7)+,A2
  61.         MOVE.L  -(A3),D2        ; valid
  62.         PEA     -10(A3)         ; GetInfo.userPtr
  63.         SUBQ.L  #2,A7           ; GetInfo.ch
  64.         MOVE.L  -4(A3),A0
  65.         SUBQ.W  #1,(A0)         ; DEC (pos)
  66.         MOVE.L  #chrGet,(A3)+   ; get-Procedure
  67.         CLR.L   (A3)+           ; get-static link
  68.         MOVE.L  A7,(A3)+        ; ADR (GetInfo)
  69.         MOVE.L  D2,(A3)+        ; ADR (valid)
  70.         JMP     (A2)
  71.     END
  72.   END prpTo;
  73.  
  74. PROCEDURE prpToN;
  75.   BEGIN
  76.     ASSEMBLER
  77.         MOVE.L  (A7)+,A2
  78.         MOVE.L  -(A3),D2        ; valid
  79.         MOVE.L  -(A3),A1        ; pos
  80.         MOVE.W  -(A3),D0        ; base
  81.         MOVE.L  A1,(A3)+        ; pos
  82.         SUBQ.W  #1,(A1)         ; DEC (pos)
  83.         PEA     -10(A3)         ; GetInfo.userPtr
  84.         SUBQ.L  #2,A7           ; GetInfo.ch
  85.         MOVE.L  #chrGet,(A3)+   ; get-Procedure
  86.         CLR.L   (A3)+           ; get-static link
  87.         MOVE.L  A7,(A3)+        ; ADR (GetInfo)
  88.         MOVE.W  D0,(A3)+        ; base
  89.         MOVE.L  D2,(A3)+        ; ADR (valid)
  90.         JMP     (A2)
  91.     END
  92.   END prpToN;
  93.  
  94. PROCEDURE fin4;
  95.   BEGIN
  96.     ASSEMBLER
  97.         ADDQ.L  #6,A7
  98.         MOVE.L  -(A3),D2
  99.         SUBA.W  #10,A3
  100.         MOVE.L  D2,(A3)+
  101.     END
  102.   END fin4;
  103.  
  104. PROCEDURE fin2;
  105.   BEGIN
  106.     ASSEMBLER
  107.         ADDQ.L  #6,A7
  108.         MOVE.W  -(A3),D2
  109.         SUBA.W  #10,A3
  110.         MOVE.W  D2,(A3)+
  111.     END
  112.   END fin2;
  113.  
  114. PROCEDURE StrToLCard ( REF str: ARRAY OF CHAR; VAR pos: CARDINAL;
  115.                        VAR valid : BOOLEAN ): LONGCARD;
  116.   BEGIN
  117.     ASSEMBLER
  118.         JSR     prpTo
  119.         JSR     Convert.ConvToLCard
  120.         JMP     fin4
  121.     END
  122.   END StrToLCard;
  123.  
  124. PROCEDURE StrToCard  ( REF str: ARRAY OF CHAR; VAR pos: CARDINAL;
  125.                        VAR valid: BOOLEAN ): CARDINAL;
  126.   BEGIN
  127.     ASSEMBLER
  128.         JSR     prpTo
  129.         JSR     Convert.ConvToCard
  130.         JMP     fin2
  131.     END
  132.   END StrToCard;
  133.  
  134. PROCEDURE StrToLInt  ( REF str: ARRAY OF CHAR; VAR pos: CARDINAL;
  135.                        VAR valid: BOOLEAN ): LONGINT;
  136.   BEGIN
  137.     ASSEMBLER
  138.         JSR     prpTo
  139.         JSR     Convert.ConvToLInt
  140.         JMP     fin4
  141.     END
  142.   END StrToLInt;
  143.  
  144. PROCEDURE StrToInt   ( REF str: ARRAY OF CHAR; VAR pos: CARDINAL;
  145.                        VAR valid: BOOLEAN ): INTEGER;
  146.   BEGIN
  147.     ASSEMBLER
  148.         JSR     prpTo
  149.         JSR     Convert.ConvToInt
  150.         JMP     fin2
  151.     END
  152.   END StrToInt;
  153.  
  154.  
  155. PROCEDURE StrToLNum (     REF str: ARRAY OF CHAR;
  156.                           base: CARDINAL; (* [2..36] *)
  157.                       VAR pos: CARDINAL;
  158.                       VAR valid : BOOLEAN ): LONGCARD;
  159.   BEGIN
  160.     ASSEMBLER
  161.         JSR     prpToN
  162.         JSR     Convert.ConvToLNum
  163.         JMP     fin4
  164.     END
  165.   END StrToLNum;
  166.  
  167. PROCEDURE StrToNum (    REF str: ARRAY OF CHAR;
  168.                         base: CARDINAL; (* [2..36] *)
  169.                     VAR pos: CARDINAL;
  170.                     VAR valid: BOOLEAN ): CARDINAL;
  171.   BEGIN
  172.     ASSEMBLER
  173.         JSR     prpToN
  174.         JSR     Convert.ConvToNum
  175.         JMP     fin2
  176.     END
  177.   END StrToNum;
  178.  
  179.  
  180. PROCEDURE StrToReal ( REF str: ARRAY OF CHAR; VAR pos: CARDINAL;
  181.                       VAR valid: BOOLEAN ): LONGREAL;
  182.   BEGIN
  183.     ASSEMBLER
  184.         JSR     prpTo
  185.         JSR     Convert.ConvToReal
  186.         ADDQ.L  #6,A7
  187.         MOVE.L  -(A3),D2
  188.         MOVE.L  -(A3),D1
  189.         SUBA.W  #10,A3
  190.         MOVE.L  D1,(A3)+
  191.         MOVE.L  D2,(A3)+
  192.     END
  193.   END StrToReal;
  194.  
  195.  
  196. PROCEDURE prpL;
  197.   BEGIN
  198.     ASSEMBLER
  199.         MOVE.W  -(A3),D0
  200.         MOVE.L  -(A3),D1
  201.         MOVE.L  A3,A1
  202.         ADDA.W  #80,A3          ; Platz f. String
  203.         MOVE.L  D1,(A3)+
  204.         MOVE.W  D0,(A3)+
  205.         MOVE.L  A1,(A3)+
  206.         MOVE    #79,(A3)+
  207.     END
  208.   END prpL;
  209.  
  210. PROCEDURE prpW;
  211.   BEGIN
  212.     ASSEMBLER
  213.         MOVE.L  -(A3),D0
  214.         MOVE.L  A3,A1
  215.         ADDA.W  #80,A3          ; Platz f. String
  216.         MOVE.L  D0,(A3)+
  217.         MOVE.L  A1,(A3)+
  218.         MOVE    #79,(A3)+
  219.     END
  220.   END prpW;
  221.  
  222. PROCEDURE prpR;
  223.   BEGIN
  224.     ASSEMBLER
  225.         MOVE.L  -(A3),D0
  226.         MOVE.L  -(A3),D1
  227.         MOVE.L  -(A3),D2
  228.         MOVE.L  A3,A1
  229.         ADDA.W  #80,A3          ; Platz f. String
  230.         MOVE.L  D2,(A3)+
  231.         MOVE.L  D1,(A3)+
  232.         MOVE.L  D0,(A3)+
  233.         MOVE.L  A1,(A3)+
  234.         MOVE    #79,(A3)+
  235.     END
  236.   END prpR;
  237.  
  238. PROCEDURE CardToStr ( v: LONGCARD; spc: CARDINAL): String;
  239.   BEGIN
  240.     ASSEMBLER
  241.         JSR     prpL
  242.         JMP     Convert.ConvCard
  243.     END
  244.   END CardToStr;
  245.  
  246. PROCEDURE IntToStr  ( v: LONGINT;  spc: CARDINAL): String;
  247.   BEGIN
  248.     ASSEMBLER
  249.         JSR     prpL
  250.         JMP     Convert.ConvInt
  251.     END
  252.   END IntToStr;
  253.   
  254. PROCEDURE LHexToStr ( v: LONGWORD; spc: CARDINAL): String;
  255.   BEGIN
  256.     ASSEMBLER
  257.         JSR     prpL
  258.         JMP     Convert.ConvLHex
  259.     END
  260.   END LHexToStr;
  261.   
  262. PROCEDURE HexToStr  ( v: WORD;     spc: CARDINAL): String;
  263.   BEGIN
  264.     ASSEMBLER
  265.         JSR     prpW
  266.         JMP     Convert.ConvHex
  267.     END
  268.   END HexToStr;
  269.   
  270. PROCEDURE LBinToStr ( v: LONGWORD; spc: CARDINAL): String;
  271.   BEGIN
  272.     ASSEMBLER
  273.         JSR     prpL
  274.         JMP     Convert.ConvLBin
  275.     END
  276.   END LBinToStr;
  277.  
  278. PROCEDURE BinToStr  ( v: WORD;     spc: CARDINAL): String;
  279.   BEGIN
  280.     ASSEMBLER
  281.         JSR     prpW
  282.         JMP     Convert.ConvBin
  283.     END
  284.   END BinToStr;
  285.  
  286. PROCEDURE LNumToStr (    lnum : LONGWORD;
  287.                          base : CARDINAL; (* [2..36] *)
  288.                          space: CARDINAL;
  289.                          fill : CHAR    ):String;
  290.   BEGIN
  291.     ASSEMBLER
  292.         MOVE.W  -(A3),D2
  293.         MOVE.L  -(A3),D0
  294.         MOVE.L  -(A3),D1
  295.         MOVE.L  A3,A1
  296.         ADDA.W  #80,A3          ; Platz f. String
  297.         MOVE.L  D1,(A3)+
  298.         MOVE.L  D0,(A3)+
  299.         MOVE.W  D2,(A3)+
  300.         MOVE.L  A1,(A3)+
  301.         MOVE    #79,(A3)+
  302.         JMP     Convert.ConvLNum
  303.     END
  304.   END LNumToStr;
  305.  
  306. PROCEDURE NumToStr (    num  : WORD;
  307.                         base : CARDINAL; (* [2..36] *)
  308.                         space: CARDINAL;
  309.                         fill : CHAR    ):String;
  310.   BEGIN
  311.     ASSEMBLER
  312.         MOVE.L  -(A3),D0
  313.         MOVE.L  -(A3),D1
  314.         MOVE.L  A3,A1
  315.         ADDA.W  #80,A3          ; Platz f. String
  316.         MOVE.L  D1,(A3)+
  317.         MOVE.L  D0,(A3)+
  318.         MOVE.L  A1,(A3)+
  319.         MOVE    #79,(A3)+
  320.         JMP     Convert.ConvNum
  321.     END
  322.   END NumToStr;
  323.  
  324. PROCEDURE FloatToStr ( v: LONGREAL; spc, n:CARDINAL): String;
  325.   BEGIN
  326.     ASSEMBLER
  327.         JSR     prpR
  328.         JMP     Convert.ConvFloat
  329.     END
  330.   END FloatToStr;
  331.  
  332. PROCEDURE FixToStr ( v: LONGREAL; spc, n:CARDINAL): String;
  333.   BEGIN
  334.     ASSEMBLER
  335.         JSR     prpR
  336.         JMP     Convert.ConvFix
  337.     END
  338.   END FixToStr;
  339.  
  340. PROCEDURE RealToStr( v: LONGREAL; spc, n: CARDINAL): String;
  341.   BEGIN
  342.     ASSEMBLER
  343.         JSR     prpR
  344.         JMP     Convert.ConvReal
  345.     END
  346.   END RealToStr;
  347.  
  348. PROCEDURE EngToStr ( v: LONGREAL; spc, n:CARDINAL): String;
  349.   BEGIN
  350.     ASSEMBLER
  351.         JSR     prpR
  352.         JMP     Convert.ConvEng
  353.     END
  354.   END EngToStr;
  355.  
  356. END StrConv.
  357. ə
  358. (* $FFFBE407$FFFBE407$FFFBE407$FFFBE407$FFFBE407$FFFBE407$FFFBE407$FFFBE407$FFFBE407$FFFBE407$FFFBE407$FFFBE407$FFFBE407$FFFBE407$FFFBE407$000008DC$FFFBE407$FFFBE407$FFFBE407$FFFBE407$FFFBE407$FFFBE407$FFFBE407$FFFBE407$FFFBE407$FFFBE407$FFFBE407$FFFBE407$FFFBE407$FFFBE407$FFFBE407$FFFBE407$FFFBE407$FFFBE407$FFFBE407$FFFBE407$FFFBE407$FFFBE407$FFFBE407$FFFBE407$FFFBE407$FFFBE407Ç$00000ACCT.......T.......T.......T.......T.......T.......T.......T.......T.......T.......$000022A5$00000D6D$00000834$0000083C$0000085D$0000082A$0000085D$00000811$00000803$FFEE0BED$00000ACC$0000002E$000013E0$000020A6$00002152$000021FAãÇü*)
  359.